/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.bookshop.webService;

import com.bookshop.framework.PerformancesMonitor;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CallWebService {
    private String stockState;
    
    public String getStockBookByISBN(String isbn) { // Par le webservice
        System.out.println("[CallWebService] isbn appelé : " + isbn);
        
        PerformancesMonitor monitor = new PerformancesMonitor();
        monitor.start("java.lang.Object.UrlConnection.getInputStream()");
        
        // Récupération du code de la réponse
        int statusCode = 0;
        
        String resultat = "0";
        System.out.println("[CallWebService] resultat avant l'appel au webservice : " + resultat);
        try {
            
            
            InetAddress ia = InetAddress.getByName("192.168.30.60");
            if (ia.isReachable(3000)) {
                System.out.println("[CallWebService] L'adresse IP ou le nom de domaine est accessible...");
                System.out.println("[CallWebService] Adresse appelée : " + ia.toString());
                String urlStock = "http:/" + ia.toString() + ":8181/FacadeDisponibilites/rest/service/nbEnStock/" + isbn;
                System.out.println("[CallWebService] URL d'appel du webservice : " + urlStock);
                URL url = new URL(urlStock);
                System.out.println("[CallWebService] Ouverture et paramétrage de la connexion en cours...");
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setRequestProperty("Accept", "application/xml");
                
                statusCode = connection.getResponseCode();
               
                System.out.println("[CallWebService] Récupération de l'InputStream...");
                
                InputStream xml = connection.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(xml);
                DataInputStream dis = new DataInputStream(bis);
                
                System.out.println("[CallWebService] Tant qu'il y a des octets à lire...");
                while(dis.available() != 0) {
                    System.out.println("[CallWebService] ... on lit les octets...");
                    resultat = dis.readLine();
                    this.setStockState(resultat);
                    System.out.println("[CallWebService] resultat : " + resultat);
                    
                }
                System.out.println("[CallWebService] Fermeture de la connexion");
                connection.disconnect();
                
            } else {
                System.out.println("[CallWebService] L'adresse IP ou le nom de domaine n'est pas accessible...");
                resultat = "Le webservice à l'adresse ou au nom de domaine spécifié n'est pas accessible.";
            }
            
            
        } catch(IOException ex) {
            Logger.getLogger(CallWebService.class.getName()).log(Level.SEVERE, null, ex);
            
            if(statusCode == 500) {
                resultat = "Un problème est survenu lors de l'accès au service (erreur 500).";
            }
        }
        
        System.out.println("[CallWebService] Arrêt du moniteur et affichage des stats qui m'intéressent...");
        monitor.stop();
        monitor.logResponseTime();
        
        return resultat;
    }
    
    public void setStockState( String newStockState ) {
        System.out.println("[CallWebService] Settement de l'attribut stockState");
        this.stockState = newStockState;
        System.out.println("[CallWebService] Nouvelle valeur de stockState: " + this.stockState);
    }
    public String getStockState(String isbn){
        System.out.println("[CallWebService] stockState : " + this.stockState);
        if(this.stockState == null) {
            this.setStockState( this.getStockBookByISBN(isbn) );
        }
        if(this.stockState == null) {
            this.setStockState("null");
        }
        return this.stockState;
        
    }
    
    public String getStock(String isbn) {
        String resultat = "0";
        try {
                          
             InetAddress ia = InetAddress.getByName("192.168.30.60");
             if (ia.isReachable(20)) {
             
                String urlStock = "http:/" + ia.toString() + ":8181/FacadeDisponibilites/rest/service/nbEnStock/" + isbn;
                URL url = new URL(urlStock);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setRequestProperty("Accept", "application/xml");
             
                InputStream xml = connection.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(xml);
                DataInputStream dis = new DataInputStream(bis);


                while (dis.available() != 0) {
                    resultat = dis.readLine();
                }
                connection.disconnect();
                
             }
                     
        } catch (Exception ex) {
            Logger.getLogger(CallWebService.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultat;
    }
    
    /**
     * appel du web service REST- GestionStock et récupération du stock
     * disponible pour un livre
     *
     * @return
     */
    
}
